home *** CD-ROM | disk | FTP | other *** search
- *cX PROGRAMACION 3D
- *cMBy Skynet
- *cR
- Hola, en esta segunda parte de esta sec-
- cion, vamos a machacar las cosas que aprendi-
- mos en la *cEPhyMosys III*cR. En primer lugar, os
- agradezco el interes que habeis tenido en
- esto, ya que han llegado bastantes E-mails,
- ademas hoy como prometí a algunos, meteré mi
- lector de archivos de *cA3D Studio*cR...bueno,
- empecemos!! :)
- Como vimos la semana pasada, aprendimos a
- crear una tercera dimension en nuestro moni-
- tor, a crear pantallas virtuales, las matri-
- ces de las operaciones basicas, crear campos
- de estrellas, etc...
- Hoy lo que vamos a hacer es a "coger" esos
- objetos 3D para meterlos en nuestra demo.
- Como los vamos a coger? bueno...pues de eso
- se encarga mi programa. El *cA3D Studio*cR tiene
- una opcion para salvar los archivos en archi-
- vos *cW3DS*cR o *cWASC*cR. Los archivos *cWASC*cR son los que
- nos interesan, porque contienen la lista de
- vertices, poligonos y aristas. Para conocer
- un poco mas el formato vamos a abrir uno re-
- cortado:
-
- *cH--------------------------------------------
- *c.Ambient light color:
- Red=0.039216 Green=0.039216 Blue=0.039216
- *i$
- Named object: "Object"
- Tri-mesh, Vertices: 660 Faces: 1292
- Vertex list:
- Vertex 0:
- X: -90.999413 Y: 0.000003 Z: 22.282175
- Vertex 1:
- X: -101.339294 Y: 0 Z: 22.282175
- Vertex 2:
- X: -101.653366 Y: 0.000003 Z: 24.025192
- Vertex 3:
- X: -102.086533 Y: 5.03 Z: 25.571856
- Vertex 659:
- X: 124.625061 Y: 13.499992 Z: 26.994728
- Face list:
- Face 0: A:1 B:0 C:121 AB:1 BC:1 CA:0
- Smoothing: 17
- Face 1: A:62 B:61 C:60 AB:1 BC:1 CA:0
- Smoothing: 17
- Face 2: A:63 B:62 C:60 AB:1 BC:0 CA:0
- *cR
-
- Aunque no lo veamos ahora, el programa
- separa en paginas el archivo, cosa que no he
- depurado todavia y que por tanto se debe
- eliminar con un editor para que todo quede
- como si fuese una unica pagina. Despues
- podemos ver que el programa tiene numerados
- los vertices. Cada vertice contiene los tres
- valores en X,Y,Z y por tanto en nuestro
- programa hemos creado un *c6ARRAY*cR que almacenara
- variables con los campos X,Y y Z de forma que
- el Vertex 0 coincida en la posicion 0 del
- array, el Vertex 1 en la posicion 1...etc...
-
- Aqui tendremos que "retocar" algo tambien
- del archivo. Como para nuestro programa vamos
- a realizar una conversion a 3D, la variable Y
- no puede ser nunca 0, y por tanto debe modi-
- ficarse. Fijaros en el vertex 1, como veis
- tiene de valor 0. lo que haremos sera editar
- lo y dejarlo por ejemplo: *i#
- *c.
- Vertex 1:
- X: -101.339294 Y: 0.00010 Z: 22.282175
- *cR
- De forma que le pondremos todos los decima-
- les que necesitamos (5 al menos), aproximando
- a su valor real. Con esto tambien tendremos
- que modificar el vertex 3 debido a que no
- llega ni a 5 decimales. Con su posterior
- modificacion quedara:
- *c.
- Vertex 3:
- X: -102.086533 Y: 5.030000 Z: 25.571856
- *cR
- Y nuestro programa ya no tendra problemas.
- Para acabar de repararlo, el objeto que
- creamos, si sobrepasa las 80 unidades se
- saldra de pantalla, asi que podeis hacerlo
- pequeño y despues aumentarlo con el "aumenta-
- dor" que he programado en uno de los procedi-
- mientos.
- Una vez comentados los errores que debemos
- evitar en el programa, pasamos a como se ha
- realizado. Una vez hayamos insertado todos
- los vertices en el array lo que haremos es
- insertar los planos en otro array. Este array
- sera un array de una variable que tendra de
- campos A,B y C que son como se especifica un
- poligono en *cA3D Studio*cR:
- *c.
- Face 0: A:1 B:0 C:121 AB:1 BC:1 CA:0
- *cR
- Esto significa que la FACE 0 se compone por
- el vertice 1,0 y 121 como indican A, B i C
- que son los indicadores de poligonos. De esta
- forma creamos el poligono mas veloz que es el
- triangulo. (Es el mas rapido debido a que a
- la hora de rellenarlo no tiene problemas de
- intersecciones de lineas, ya que en un trian-
- gulo nunca podremos tener ese problema.
- Bueno, una vez insertado en la memoria,
- ahora tendremos que crearlo, lo cual puede
- ser visto en el codigo en PASCAL de
- *cTSkynet.pas*cR
- Ademas he creado algunos ejemplos de archi-
- vos*cW ASC*cR.
- Ah!! Si mirais bien el codigo fuente,
- vereis que utilizo una libreria de musica,
- esta es para incorporarle sonido a la rota
- cion...esto lo explicare en el proximo nume-
- ro. Espero que os sirva para algo, o en
- vuestras demos... si lo utilizais, almenos
- nombradnos! :)
- Bueno, nos vemos el próximo número con
- efectos graficos....
- *cM
- Skynet Rulez!
- amarfer@alufis34.ffisic.uv.es
-
- *i"
-